package org.nf.web.adapter;

import cn.hutool.core.util.ReflectUtil;
import org.nf.web.servlet.Controller;
import org.nf.web.servlet.HandlerAdapter;
import org.nf.web.servlet.ServletApi;

/**
 * @Author czl
 * @Date 2024-05-15
 */
public class SimplerHandlerAdapter implements HandlerAdapter {

    @Override
    public boolean supports(Object handler) {
        //如果handler是Class的实例，
        // 则强转为Class对象用一个clazz变量声明
        if(handler instanceof Class clazz) {
            //判断是否有实现Controller接口
            if(Controller.class.isAssignableFrom(clazz)) {
                return true;
            }
        }
        return false;
    }

    @Override
    public Object handler(Object handler, ServletApi servletApi) throws Exception {
        //先将handler转换为Controller的Class对象
        //注意：不能调用handler.getClass()方法来转换
        //因为这个方法得到的Class对象就是当前类的Class
        //也就是Object的Class对象
        Class<?> clazz = (Class<?>)handler;
        //创建Controller的实例
        Controller controller = (Controller) ReflectUtil.newInstance(clazz);
        //调用execute方法处理请求
        return controller.execute(servletApi.request(), servletApi.response());
    }
}